home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / Apps / DevTools / eText5 / Source / eTNote.subproj / eTNoteUI.m < prev    next >
Encoding:
Text File  |  1994-10-24  |  3.9 KB  |  180 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //    FILENAME:    eTNoteUI.m
  3. //    SUMMARY:    Implementation of the inspector of Notes
  4. //    SUPERCLASS:    Object
  5. //    INTERFACE:    eTNoteUI.nib
  6. //    PROTOCOLS:    <Inspectable>
  7. //    AUTHOR:        Rohit Khare
  8. //    COPYRIGHT:    (c) 1994 California Institure of Technology, eText Project
  9. ///////////////////////////////////////////////////////////////////////////////
  10. //  IMPLEMENTATION COMMENTS
  11. //        Just a shared nib, slip-slidin' awaaay.
  12. ///////////////////////////////////////////////////////////////////////////////
  13. //    HISTORY
  14. //    07/24/94:    Migrated to subclas of eTImageUI 
  15. //    05/22/94:    Created. First actual implementation.
  16. ///////////////////////////////////////////////////////////////////////////////
  17.  
  18. #import "eTNoteUI.h"
  19. #define PROP "Notation"
  20.  
  21. @implementation eTNoteUI
  22. //    id        notePanel;
  23. //    id        noteView;
  24. //    id        etNote;
  25. //    id        repText
  26. //    id        ownerField;
  27. //    id        dateField;
  28. //     BOOL    ownerDirty;
  29. //    BOOL    textDirty;
  30.  
  31. + new
  32. {
  33.     static eTNoteUI *ui = nil;
  34.     
  35.     if (!ui) {
  36.         ui = [[eTNoteUI alloc] init];
  37.     }
  38.     return ui;
  39. }
  40.  
  41. - init
  42. {
  43.     char        buf[MAXPATHLEN];
  44.     NXBundle   *bundle;
  45.  
  46.     [super init];
  47.     bundle = [NXBundle bundleForClass:[eTNoteUI class]];
  48.     if ( [bundle getPath:buf forResource:"eTNoteUI" ofType:"nib"] ) {
  49.         [NXApp loadNibFile:buf owner:self withNames:NO];
  50.     } else {
  51.         NXLogError("NIB not found: eTNoteUI");
  52.     }
  53.     noteView = [notePanel contentView];
  54.     [repText setDelegate:self];
  55.     ownerDirty = textDirty = NO;
  56.     return self;
  57. }
  58.  
  59. - free {return self;}
  60.  
  61. - setNote:newNote
  62. {
  63.     etNote = newNote;
  64.     return [self load];
  65. }
  66.  
  67. - load
  68. {
  69.     NXStream *stream;
  70.     char    *buf;
  71.  
  72.     [ownerField setStringValue:[etNote owner]];    
  73.     [dateField setStringValue:[etNote date]];
  74.     buf = (char *)[etNote RTFRep];
  75.     if (buf) {stream = NXOpenMemory(buf,strlen(buf), NX_READONLY);
  76.     [repText readRichText:stream];
  77.     NXClose(stream);}
  78.     return self;
  79. }
  80. - resetOwner:sender
  81. {
  82.     if (ownerDirty) {
  83.         [etNote setOwner:NXUniqueString([sender stringValue])];
  84.         ownerDirty= NO;
  85.     }
  86.     return self;
  87. }
  88.  
  89. - resetText:sender
  90. {
  91.     NXStream    *stream;
  92.     char        *buffer, *data;
  93.     int            length, maxlen;
  94.  
  95.     if (!textDirty) return self;
  96.     stream = NXOpenMemory(NULL, 0, NX_WRITEONLY);
  97.     [repText writeRichText:stream];
  98.     NXGetMemoryBuffer(stream, &buffer, &length, &maxlen);
  99.     data = malloc((length+1) * sizeof(char));
  100.     bcopy(buffer, data, length);
  101.     data[length] = 0;
  102.     NXCloseMemory(stream, NX_FREEBUFFER);
  103.     [etNote setRTFRep:data];
  104.     free(data);
  105.     [dateField setStringValue:[etNote date]];
  106.     textDirty = NO;
  107.     return self;
  108. }
  109.  
  110. - sync
  111. {
  112.     [self resetText:repText];
  113.     [self resetOwner:ownerField];
  114.     return self;
  115. }
  116. - textDidGetKeys:textObject isEmpty:(BOOL)flag
  117. {
  118.     if (textObject == repText)    textDirty = YES;
  119.     else ownerDirty = YES;
  120.     return self;
  121. }
  122. - textDidChange:textObject
  123. {
  124.     if (textObject == repText)    textDirty = YES;
  125.     else ownerDirty = YES;
  126.     return self;
  127. }
  128.  
  129. //////////////////////
  130. - (const NXAtom *) types
  131. {
  132.     static NXAtom *types = NULL;
  133.     
  134.     if (!types) {
  135.         int i;
  136.         const NXAtom *superTypes = [super types];
  137.         
  138.         for(i=0;superTypes[i];i++);
  139.         i++; // make room for terminating NULL
  140.         i++; // make room for our type
  141.         types = malloc(i * sizeof(NXAtom));
  142.         types[0] = NXUniqueString(PROP);
  143.         for(i=0;superTypes[i];i++) types[i+1] = superTypes[i];
  144.         types[i+1] = NULL;
  145.     }
  146.     return types;
  147. }
  148.  
  149. - (const char *) inspectorTitle
  150. {
  151.     return NXUniqueString("eTNote");
  152. }
  153.  
  154. - resignInspector: (View *) oldInspector ofType: (const char *) type
  155. {
  156.     if (oldInspector != noteView)
  157.         [super resignInspector:oldInspector ofType:type];
  158.     else 
  159.         [self resetText:repText];
  160.     return self;
  161. }
  162.  
  163. - activateInspector: (View *) newInspector ofType: (const char *) type
  164. {
  165.     if (newInspector != noteView)
  166.         [super activateInspector:newInspector ofType:type];
  167.     else 
  168.         [[NXApp inspector] makeFirstResponder:repText];
  169.     return self;
  170. }
  171.  
  172. - inspectorForType:(const char *) type
  173. {
  174.     if(!strcmp(type,NXUniqueString(PROP)))
  175.         return noteView;
  176.     return [super inspectorForType:type];
  177. }
  178.  
  179. ///////////////////////////////
  180. @end